/**
 * request 使用说明
 * url : 请求的接口
 * data: 请求的参数
 * method: 请求的方法，GET, PUT, POST, DELETE 等等，可以传小写的 get, put, post, delete
 * responseType: 設置响应的数据类型。合法值：text、arraybuffer
 **/

import baseURL from '@/utils/baseURL.js';
import setStateFn from '@/utils/state.js';
/**
 * 获取请求头信息
 **/
export function getHeaders() {
	return {
		'Content-Type': 'application/x-www-form-urlencoded',
		Token: JSON.parse(uni.getStorageSync('userOptions')).token,
	};
}

function request({
	url,
	data,
	method,
	responseType
}) {
	return new Promise((resolve, reject) => {
		let userToken = JSON.parse(uni.getStorageSync('userOptions'))?.token;
		if (!userToken) {
			uni.reLaunch({
				url: '/pages/login/login',
			});
		}
		uni.request({
			url: baseURL + url,
			data: {
				...data,
			},
			method: method.toUpperCase(),
			responseType: responseType ? responseType : 'text',
			header: getHeaders(),
			timeout: 5000,
			success: res => {
				if (res.data.code == 0) {
					resolve(res.data);
				}
				if (res.data.code == 1 || res.data.code == 200) {
					resolve(res.data.data);
				}
				if (res.data.code === 400 || res.data.code === 500) {
					reject(res);
				}
				if (res.data.code === 401) {
					reject(res);
					uni.showModal({
						title: '系统提示',
						content: '登录狀態已過期，您可以继续留在该页面，或者重新登录',
						confirmText: '重新登录',
						success: res => {
							if (res.confirm) {
								uni.removeStorageSync('token');
								uni.reLaunch({
									url: '/pages/login/login',
								});
							} else if (res.cancel) {
								console.log('用户点击取消');
							}
						},
					});
				}
				// 异常处理函数
				setStateFn(res.code);
			},
			fail: error => {
				reject(error);
			},
			complete: error => {
				// 关闭加载
				uni.hideLoading();
			},
		});
	});
}

export default request;